const fs = require('fs')
const inquirer = require('inquirer')
const chalk = require('chalk')
const ora = require('ora')
const path = require('path')
const basePath = path.resolve(__dirname, '../src')

const dir = `${basePath}/module`
const files = fs.readdirSync(dir)

module.exports = () => {
  inquirer.prompt([{
    type: 'input', // 问题类型为填空题
    message: '您想要创建的模块名称是(请输入英文):', // 问题描述
    name: 'moduleName', // 问题对应的属性
    validate: (val) => { // 对输入的值做判断
      if (val === "") {
        return chalk.bold.red('模块名称不能为空，请重新输入')
      }
      if (files.indexOf(val) != -1) {
        return chalk.bold.red('该模块名称可能已存在，请重新输入')
      }
      return true
    }
  }]).then(answers => {
    const moduleName = answers.moduleName

    inquirer.prompt([{
        type: 'input', // 问题类型为填空题
        message: '该模块的中文名称是(请输入中文，项目启动后的名称):', // 问题描述
        name: 'routerModuleName', // 问题对应的属性
      }]).then(answers => {
        const routerModuleName = answers.routerModuleName === '' ? moduleName : answers.routerModuleName

        const spinner = ora('创建模块中...')
    
    


    // 路由文件
    const routerTep = `export default [{
	path: '/${moduleName}',
	component: () => import('@/layout/index'),
	//redirect: '${moduleName}/这里手动填写重定向的菜单名',
	meta: { title: '${routerModuleName}', icon: '${routerModuleName}模块的图标' },
	children: [



	]
}]`

    // 函数获得下标的方法
    function contains (arrays, obj) {
      var i = arrays.length;
      while (i--) {
        if (arrays[i].indexOf(obj) !== -1) {
          return i;
        }
      }
      return false;
    }

    // 创建模块文件夹
    spinner.start('开始创建')
    process.chdir(`${basePath}/module`) // cd module
    fs.mkdirSync(`./${moduleName}`) // mkdir moduleName
    spinner.succeed(`src/module/${moduleName}`)


    process.chdir(`${basePath}/module/${moduleName}`) // cd moduleName

    fs.mkdirSync('api') // mkdir moduleName
    spinner.succeed(`src/module/${moduleName}/api`)
    fs.mkdirSync('data') // mkdir moduleName 

    spinner.succeed(`src/module/${moduleName}/data`)
    fs.mkdirSync('page') // mkdir moduleName
    spinner.succeed(`src/module/${moduleName}/page`)
    fs.mkdirSync('router') // mkdir moduleName
    spinner.succeed(`src/module/${moduleName}/router`)


    process.chdir(`${basePath}/module/${moduleName}/api`) // cd moduleName
    fs.mkdirSync('crud') // mkdir moduleName
    spinner.succeed(`src/module/${moduleName}/api/crud`)

    process.chdir(`${basePath}/module/${moduleName}/router`) // cd moduleName
    fs.writeFileSync('index.js', routerTep) // data.js
    spinner.succeed(`src/module/${moduleName}/router/index.js`)

    process.chdir(`${basePath}/router`) // cd router //跳转到总路由文件夹内
    const readRouter = fs.readFileSync('index.js', 'utf8').split(/\r\n|\n|\r/gm); //读取index.js文件
    const routerTepIndex = contains(readRouter, '// npm run module Identifier:importRouter') //插入import ${moduleName} from '@/module/${moduleName}/router'的下标
    const routerInjectIndex = contains(readRouter, '// npm run module Identifier:routerInject') //插入的下标

    if (!routerTepIndex || !routerInjectIndex) {
      console.log(`${basePath}/router/index.js 文件要插入数据的下标未找到`)
      process.exit(0)
    }

    const importRouter = `import ${moduleName} from '@/module/${moduleName}/router'`
    const routerInject = `    ...${moduleName},`

    readRouter.splice(routerTepIndex, 0, importRouter); //朝着读取的内容添加指定内容
    readRouter.splice(routerInjectIndex + 1, 0, routerInject); //朝着读取的内容添加指定内容

    fs.writeFileSync('index.js', readRouter.join('\r\n')) //重新写入文件

    spinner.succeed(`/router/index.js 文件中插入数据啦`)

    spinner.stop('创建完成')

    console.log(chalk.bold.white(`创建${moduleName}模块成功`))

    require('./command.js')()
  })

  })
}